package com.ado.agea.carga;

import java.util.LinkedHashMap;
import java.util.Map;

import com.ado.agea.datos.Colecciones;
import com.ado.agea.main.Proceso;

public class CargarExtras implements Proceso {

	@Override
	public void procesar() {
		Map<String, String> conceptoActual;
		Map<String, String> relacion;

		for (String key : Colecciones.conceptos.keySet()) {
			conceptoActual = Colecciones.conceptos.get(key);
			if (!conceptoActual.containsKey("id_modelo")) {
				conceptoActual.put("id_modelo", String.valueOf(Colecciones.modelos.size()));
				conceptoActual.put("id_maestro", getMaestro(conceptoActual));
			}
		}
		for (String key : Colecciones.relaciones.keySet()) {
			relacion = Colecciones.relaciones.get(key);
			if (!relacion.containsKey("id_modelo")) {
				relacion.put("id_modelo", String.valueOf(Colecciones.modelos.size()));
			}
		}
	}

	public String getMaestro(Map<String, String> conceptoActual) {
		String codigoActual = conceptoActual.get("codigo");
		String idMaestro = Colecciones.conceptosCodigosMaestros.get(codigoActual);
		Map<String, String> conceptoMaestro = Colecciones.conceptosMaestros.get(idMaestro);

		if (idMaestro == null) {
			// Si no existe en maestros y es insumo lo crea, si no es insumo
			// retorna null
			if ("3".equals(conceptoActual.get("tipo"))) {
				String idConcepto = String.valueOf(Colecciones.conceptosMaestros.size() + 1);
				Map<String, String> nuevoRegistro = new LinkedHashMap<String, String>();

				Colecciones.conceptosCodigosMaestros.put(codigoActual, idConcepto);

				nuevoRegistro.put("id", idConcepto);
				nuevoRegistro.put("codigo", codigoActual);
				nuevoRegistro.put("nombre", conceptoActual.get("nombre"));
				nuevoRegistro.put("id_familia", conceptoActual.get("id_familia"));
				nuevoRegistro.put("id_unidad", conceptoActual.get("id_unidad"));
				nuevoRegistro.put("precio", conceptoActual.get("precio"));
				nuevoRegistro.put("tipo", conceptoActual.get("tipo"));
				nuevoRegistro.put("orden", "0");

				Colecciones.conceptosMaestros.put(idConcepto, nuevoRegistro);
				return idConcepto;
			}
			return null;
		} else {
			// si existe se compara precio
			if (!"1".equals(conceptoActual.get("tipo"))) {
				boolean mismoNombre = conceptoActual.get("nombre").equals(conceptoMaestro.get("nombre"));
				boolean mismoPrecio = conceptoActual.get("precio").equals(conceptoMaestro.get("precio"));
				if (mismoPrecio) {
					return idMaestro;
				}
			}
			return null;
		}
	}
}
